"""
功能介绍：查找测试用例，执行用例，生成报告，发送邮件，自动清理报告

实现逻辑：
    1-查找测试用例，生成suite
        unittest.testLoader
    2-执行用例并生成报告
        HTMLTestRunner
        1-导包
        2-定义报告文件名
        3-写入的方式打开
        4-HtmlTestRnner
        5-运行
        6-关闭
    3-自动清理报告
        方案一：每次运行框架前全部删除
            3.1-使用os.listdir获取到testReport目录下的所有文件列表
            3.2-遍历删除每个文件os.remove
        方案二：永远保留最新的n个，eg：3个
            3.1-使用os.listdir获取到testReport目录下的所有文件列表
            3.2-判断当前文件的个数是否超过3个
                a-超过3个，则删除多余的
                    确定需要删除的文件file_list[:-3]
                    遍历删除所有文件
        方案三：
            1-获取目标目录下的所有文件列表
            2-判断当前文件的个数是否超过3个
                2.1-超过3个
                    2.1.1-遍历获取每个文件的创建时间，组成一个列表
                    2.1.2-使用字典推导式，将文件列表和时间列表组合成字典（键值对）
                    2.1.3-将时间列表进行排序
                    2.1.4-获取旧的文件列表
                    2.1.5-遍历删除旧的文件
                        根据时间获取对应的文件名称
                        删除
2021年10月5日：
    新增：
    1-通过循环判断报告文件是否已经生成，来决定是否发送邮件


"""
import logging
import unittest,time,os
from HTMLTestRunner import HTMLTestReportCN
from 高级版接口第一周.common.sendExcel import sendexcel
from 高级版接口第一周.common.log import logger

name=os.path.dirname(__file__)
report_dir=name+'/testreport'
time.asctime()
# 生成测试套件
def create_suite():
    start_dir =os.path.dirname(__file__)+'/testcase'
    suite=unittest.defaultTestLoader.discover(start_dir, pattern='test*.py', top_level_dir=None)
    return suite
# 清理报告
def auto_clear():
    file_list=os.listdir(report_dir)
    if len(file_list)>3:
        for i in file_list[:-3]:
            os.remove(report_dir+'/'+i)

if __name__ == '__main__':
    auto_clear()
    suite=create_suite()

    # 定义报告名
    cur_time=time.strftime('%Y-%m-%d %H-%M-%S',time.localtime())
    report =report_dir+'/'+cur_time+'resuit.html'

    # 写入方式打开
    with open(report,'wb')as fp:
        runner=HTMLTestReportCN(stream=fp, verbosity=1, title='接口自动化测试报告', description='测试报告详情')
        runner.run(suite)

    while True:
        time.sleep(1)
        if os.path.exists(report):
            se=sendexcel()
            se.send(report)

    logging.info('file---%s' % report)